//
//  HMHomeTableViewController.swift
//  swift-新浪微博0
//
//  Created by 赵玉忠 on 16/8/29.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import YYModel

class HMHomeTableViewController: HMVisitorTableViewController {
    
    lazy var homeViewModel:HMHomeViewModel = HMHomeViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if userLogin == false {
            // 如果没有登录
            visitorView.setVisitorViewInfo(imgName: nil, message: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        setupUI()
        
        loadData()
    }
    
    /// 设置视图
    private func setupUI() {
        // 将代码抽取到分类中，快速的创建一个UIBarButtonItem
        navigationItem.leftBarButtonItem = UIBarButtonItem(imgName: "navigationbar_friendsearch", target: nil, action: nil)
        navigationItem.rightBarButtonItem = UIBarButtonItem(imgName: "navigationbar_pop", target: self, action: #selector(pop))
        
        // tableView设置
        tableView.register(HMStatusCell.self, forCellReuseIdentifier: "cell")
        
        // 先写死
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 200
        // 关闭分割线
        tableView.separatorStyle = .none
        // 设置tableView的footerView
        tableView.tableFooterView = pullUpView
        
        tableView.addSubview(hmRefreshControl)
        hmRefreshControl.addTarget(self, action: #selector(loadData), for: UIControlEvents.valueChanged)
        
        // 添加下拉刷新提示的label
        self.navigationController!.view.insertSubview(pullDownTipLabel, belowSubview: self.navigationController!.navigationBar)
        // 设置刷新控件的y值
                pullDownTipLabel.frame.origin.y = self.navigationController!.navigationBar.frame.maxY - pullDownTipLabel.frame.height
    }
    
    
    /// 加载数据
    internal func loadData() {
        homeViewModel.loadData(isPullUp: pullUpView.isAnimating) { (isSuccess,count) in
            if isSuccess {
               self.tableView.reloadData()
            }else{
             print("加载错误")
            }
            
            // 如果不是上拉加载，才去显示这个label
            if !self.pullUpView.isAnimating {
                // 显示下拉刷新的label
                self.showTipLabel(count: count)
            }

            
            print("加载回来\(count)条")
            
            // 结束刷新
            self.pullUpView.stopAnimating()
//            self.refreshControl?.endRefreshing()

        }
    }
   
    /// 下拉刷新的时候显示提示label
    ///
    /// - parameter count: <#count description#>
    private func showTipLabel(count: Int) {
        
        if pullDownTipLabel.isHidden == false {
            // 如果当前已经再显示，那么就直接返回
            return
        }
        // 让其显示出来
        pullDownTipLabel.isHidden = false
        // 要显示的字符串
        let str = count == 0 ? "没有微博数据" : "\(count) 条微博数据"
        // 设置显示的字符串
        pullDownTipLabel.text = str
        
        UIView.animate(withDuration: 1, animations: {
            // 将其显示出来
            self.pullDownTipLabel.transform = CGAffineTransform.init(translationX: 0, y: self.pullDownTipLabel.frame.height)
        }) { (_) in
            UIView.animate(withDuration: 1, delay: 1, options: [], animations: {
                // 让其回去
                self.pullDownTipLabel.transform = CGAffineTransform.identity
                }, completion: { (_) in
                    // 所有动画执行完毕之后，再次隐藏
                    self.pullDownTipLabel.isHidden = true
            })
        }
    }

    // MARK: - 监听方法
    func pop() {
        let vc = HMTempViewController()
        self.navigationController?.pushViewController(vc, animated: true)
    }
    
    internal lazy var pullUpView: UIActivityIndicatorView = {
        let pullUpView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        // 设置颜色
        pullUpView.color = UIColor.black
//        pullUpView.startAnimating()
        return pullUpView
    }()
    
    lazy var hmRefreshControl:HMRefreshControl = HMRefreshControl()

    // 下拉刷新提示的控件
    lazy var pullDownTipLabel: UILabel = {
        let label = UILabel(textColor: UIColor.white, fontSize: 14)
        // 设置背景色
        label.backgroundColor = UIColor.orange
        // 文字居中
        label.textAlignment = .center
        // 默认让其隐藏
        label.isHidden = true
        // 设置label的大小
        label.frame.size = CGSize(width: HMScreenW, height: 35)
        // 添加到的是导航控制器的导航栏下面
        return label
    }()


}
    // 把一类的方法写在一个extension中
    // MARK: - UITableViewDataSource 数据源
extension HMHomeTableViewController{
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return homeViewModel.statusArray?.count ?? 0
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! HMStatusCell
        // 取到对应位置的数据
        let model = homeViewModel.statusArray![indexPath.row]
        // 设置数据
        cell.statusViewModel = model
        
        return cell;
    }
    
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        // 通过将要显示最后一行cell去判断到tableView滚动到底部的逻辑
        if indexPath.row == homeViewModel.statusArray!.count - 1 && pullUpView.isAnimating == false {
            // 将要显示最后一行cell
            print("将要显示最后一行cell")
            // 开启动画
            pullUpView.startAnimating()
            // 去加载更多数据
            loadData()
        }
    }
}


